using EnvDTE;

namespace Microsoft.WowAddonStudio.Tests.Common.Mocks
{
	/// <summary>
	/// Represents one property in a generic collection of properties for a given object.
	/// </summary>
	public class MockProperty : Property
	{
		/// <summary>
		/// Initializes a new instance of the <see cref="MockProperty"/> class.
		/// </summary>
		/// <param name="dte">The DTE.</param>
		/// <param name="name">The name.</param>
		/// <param name="parent">The parent.</param>
		/// <param name="value">The value.</param>
		public MockProperty(DTE dte, string name, Properties parent, object value)
		{
			DTE = dte;
			Name = name;
			Parent = parent;
			Value = value;
		}

		#region Property Members

		/// <summary>
		/// Setter function to set properties values.
		/// </summary>
		/// <param name="lppvReturn">An object representing a value to set for a property</param>
		public void let_Value(object lppvReturn)
		{
			throw new System.NotImplementedException();
		}

		/// <summary>
		/// Gets or sets the value of the property returned by the <see cref="T:EnvDTE.Property"/> object.
		/// </summary>
		/// <value></value>
		/// <returns>An object.</returns>
		public object Value { get; set; }

		/// <summary>
		/// Gets the number of indices required to access the value.
		/// </summary>
		/// <value></value>
		/// <returns>A short integer representing the number of indices required to access the value.</returns>
		public short NumIndices
		{
			get { throw new System.NotImplementedException(); }
		}

		/// <summary>
		/// Microsoft Internal Use Only.
		/// </summary>
		/// <value></value>
		/// <returns/>
		public object Application
		{
			get { throw new System.NotImplementedException(); }
		}

		/// <summary>
		/// Microsoft Internal Use Only.
		/// </summary>
		/// <value></value>
		/// <returns/>
		public Properties Parent { get; private set; }

		/// <summary>
		/// Gets the name of the object.
		/// </summary>
		/// <value></value>
		/// <returns>A string value representing the name of the object.</returns>
		public string Name { get; set; }

		/// <summary>
		/// Gets the <see cref="P:EnvDTE.Property.Collection"/> containing the <see cref="T:EnvDTE.Property"/> object supporting this property.
		/// </summary>
		/// <value></value>
		/// <returns>A <see cref="T:EnvDTE.Properties"/> collection.</returns>
		public Properties Collection
		{
			get { throw new System.NotImplementedException(); }
		}

		/// <summary>
		/// Sets or gets the object supporting the <see cref="T:EnvDTE.Property"/> object.
		/// </summary>
		/// <value></value>
		/// <returns>An object representing the value of the <see cref="T:EnvDTE.Property"/> object.</returns>
		public object Object { get; set; }

		/// <summary>
		/// Gets the top-level extensibility object.
		/// </summary>
		/// <value></value>
		/// <returns>A <see cref="T:EnvDTE.DTE"/> object.</returns>
		public DTE DTE { get; set; }

		/// <summary>
		/// Get_s the indexed value.
		/// </summary>
		/// <param name="Index1">The index1.</param>
		/// <param name="Index2">The index2.</param>
		/// <param name="Index3">The index3.</param>
		/// <param name="Index4">The index4.</param>
		/// <returns></returns>
		public object get_IndexedValue(object Index1, object Index2, object Index3, object Index4)
		{
			throw new System.NotImplementedException();
		}

		/// <summary>
		/// Set_s the indexed value.
		/// </summary>
		/// <param name="Index1">The index1.</param>
		/// <param name="Index2">The index2.</param>
		/// <param name="Index3">The index3.</param>
		/// <param name="Index4">The index4.</param>
		/// <param name="Val">The val.</param>
		public void set_IndexedValue(object Index1, object Index2, object Index3, object Index4, object Val)
		{
			throw new System.NotImplementedException();
		}

		#endregion
	}
}